#include <bits/stdc++.h>

using namespace std;

// 解决思路：要记录每个素数出现的次数，这个次数就是a^b的上标b
// 1.从让n一直除以m(m从2开始)，如果能够整数，则将data_super[2]的位置增加1，同时n需要变化为n/=m
// 2.继续递归，计算f(n,m+1)


int data_super[100] = {0};

void f(int n,int m){
    if (m == 0 || n < m) return;
    while(n%m == 0) {
        n /= m;
        data_super[m] ++;
    }
    f(n,m+1);
}

int main() {
    int n;
    cin >> n;
    f(n,2);

    bool first = true;  // 添加标志以判断是否为第一个输出
    for (int i = 2; i <= 97; i++) {
        if (data_super[i] != 0) {
            if (!first) {
                cout << "*";  // 不是第一个输出时才输出 *
            }
            if (data_super[i] == 1) {
                cout << i;  // 输出素数
            } else {
                cout << i << "^" << data_super[i];  // 输出素数及其幂次
            }
            first = false;  // 标记后续输出不是第一个
        }
    }
    cout << endl;  // 输出换行符
}